package com.tosit.bmx.service.user.Impl;

import com.tosit.bmx.common.util.Sha1Util;
import com.tosit.bmx.domian.*;
import com.tosit.bmx.mapper.AreaUserMapper;
import com.tosit.bmx.mapper.CartypeMapper;
import com.tosit.bmx.mapper.UserMapper;
import com.tosit.bmx.service.user.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * 学员服务实现类
 *
 * @author tsl
 * @create 2018-04-20 15:05
 **/
@Repository
@Transactional
public class UserServiceImpl implements UserService {
    @Autowired
    UserMapper userMapper;
    @Autowired
    AreaUserMapper areaUserMapper;
    @Autowired
    CartypeMapper cartypeMapper;


    /**
     * @param
     * @return
     * @author tsl
     * @date 2018/4/20 16:57
     */
    @Override
    public User findsUserByName(String name) {
        return userMapper.selectByName(name);
    }

    /**
     * @param
     * @return
     * @author tsl
     * @date 2018/4/23 10:48
     */
    @Override
    @Transactional
    public Integer adduser(User user) {
        return userMapper.insertSelective(user);
    }

    @Override
    @Transactional
    public Integer modifyUser(User user) {
        return userMapper.updateByPrimaryKeySelective(user);
    }
    /**
     * 获取某个地区所有人
     * @author tsl
     * @date 2018/4/23 15:13
     * @param id 区域id
     * @param type 民族  1汉人 2藏
     * @return
     */
    @Override
    public List<User> gainUserByArea(Integer id,Integer type) {
        switch (type) {
            case 1:
                return userMapper.selectByHArea(id);
            case 2:
                return userMapper.selectByZArea(id);
        }
        return null;
    }
    /**
     * 获取未地区的所有人
     * @author tsl
     * @date 2018/4/23 15:13
     * @param type 民族  1汉人 2藏
     * @return
     */
    @Override
    public List<User> gainNAreaUser(Integer type) {
        switch (type) {
            case 1:
                return userMapper.selectNAreaHUser();
            case 2:
                return userMapper.selectNAreaZUser();
        }
        return null;
    }

    @Override
    @Transactional
    public Integer removeUser(List<Integer> ids) {
        areaUserMapper.deleteByuserId(ids);
        return userMapper.deleteByIds(ids);
    }
    /**
     * 根据区域和用户电话，用户名搜索某一用户
     * @param searchCode 搜所关键词
     * @param type 民族  1汉人 2藏
     * @param areaId
     * @author tsl
     * @date 2018/4/23 13:24
     */
    @Override
    public  List<User> seekUser(Integer areaId, String searchCode,Integer type) {
                return userMapper.selectByCode(areaId,searchCode,type);
    }

    /**
     * 根据区域和用户状态搜索用户（1正常使用  2到期用户 3停用用户 注：全部用户可使用在上/userByArea接口）
     * @param areaId  区域id
     * @param status 查询类型  1正常使用  2到期用户 3停用用户
     *  @param type 民族  1汉人 2藏
     * @author tsl
     * @date 2018/4/23 15:24
     */
    @Override
    public List<User> seekUser(Integer areaId,Integer type,Integer status) {
        switch (status) {
            case 1:
                return userMapper.selectNormalUser(areaId,type);
            case 2:
                return userMapper.selectExpireUser(areaId,type);
            case 3:
                return userMapper.selectDisableUser(areaId,type);
        }
        return null;
    }
    /**
     * 获取最后一条
     * @author tsl
     * @date 2018/4/23 16:46
     * @param
     * @return
     */
    @Override
    public User getLastUser() {
        return userMapper.selectLastOne();
    }
    /**
     * 关联到所有题型，科目，车型上（题型没被禁用的）
     * @author tsl
     * @date 2018/4/23 16:46
     * @param
     * @return
     */
    @Override
    @Transactional
    public Integer relateLevel(Integer id) {
        List<UserLevel> levels = new ArrayList<>();
        List<CartypeVo> cartypes = cartypeMapper.selectVo();
        for (int i = 0; i < cartypes.size(); i++) {
            CartypeVo cartypeVo = cartypes.get(i);
            levels.add(new UserLevel(id,cartypeVo.getId(),3));
            for (int j = 0; j < cartypeVo.getCourseVos().size(); j++) {
                CourseVo courseVo = cartypeVo.getCourseVos().get(j);
                levels.add(new UserLevel(id,cartypeVo.getId(),2));
                for (int k = 0; k < courseVo.getExertypes().size(); k++) {
                    Exertype exertype = courseVo.getExertypes().get(k);
                    levels.add(new UserLevel(id,exertype.getId(),1));
                }
            }
        }
        return userMapper.relateLevel(id,levels);
    }
    /**
     * 重置某个用户密码
     *
     * @author tsl
     * @date 2018/4/24 15:34
     * @param userId 用户id
     * @return
     */
    @Override
    @Transactional
    public Integer resetPassWord(Integer userId) {
        User user = new User();
        user.setId(userId);
        user.setPassword(Sha1Util.getSha1("123456"));
        return userMapper.updateByPrimaryKeySelective(user);
    }
    /**
     * 获取在线用户
     *
     * @author tsl
     * @date 2018/4/24 15:34
     * @return
     */
    @Override
    public List<User> gainOnlineUser() {
        return   userMapper.selectOnlineUser();
    }
    /**
     * 获取用户数量
     * @param
     * @return
     * @author tsl
     * @date 2018/4/24 16:20
     */
    @Override
    public Integer getUserCount() {
        return userMapper.selectCount();
    }
    /**
     * 获取题目数量
     * @param
     * @return
     * @author tsl
     * @date 2018/4/24 16:20
     */
    @Override
    public Integer getSubjectCount() {
        return userMapper.selectSubjectCount();
    }
    /**
     * 根据用户状态搜索未分组用户（1正常使用  2到期用户 3停用用户 注：全部用户可使用在上/userByArea接口）
     *
     * @param status 查询类型  1正常使用  2到期用户 3停用用户
     * @param type   民族  1汉人 2藏
     * @author tsl
     * @date 2018/4/23 13:24
     */
    @Override
    public List<User> seekUser(Integer type, Integer status) {
        switch (status) {
            case 1:
                return userMapper.selectNormalNUser(type);
            case 2:
                return userMapper.selectExpireNUser(type);
            case 3:
                return userMapper.selectDisableNUser(type);
        }
        return null;
    }
    /**
     * 根据区域和用户电话，用户名搜索某一用户
     *
     * @param searchCode 搜所关键词
     * @param type       民族  1汉人 2藏
     * @author tsl
     * @date 2018/4/23 13:24
     */
    @Override
    public List<User> seekUser(String searchCode, Integer type) {

        return userMapper.selectNByCode(searchCode,type);
    }

}
